Partial ECC handling for a byte-write capable register

ABSTRACT

Embodiments described herein include a computing system that permits partial writes into a memory element—e.g., a register on a processor. For example, the data to be written into the memory element may be spread across multiple sources. The register may receive data from two different sources at different times and perform two separate partial write commands to store the data. Embodiments herein generate an ECC value for each of the partial writes. That is, when storing the data of the first partial write, the computing system generates a first ECC value for the data in the first partial write and stores this value in the memory element. Later, when performing the second partial write, the computing system generates a second ECC value for this data which is also stored in the memory element.

BACKGROUND

The present invention relates to partial register writes, and morespecifically, to generating error correction codes for the partialwrites.

In a processor, data may be partially written in storage because only aportion of the data is available. When the remaining portion of databecomes available, the data already in storage is read out, merged withthe incoming data, and then rewritten into storage as a full set ofdata. However, this operation (i.e., a read-modify-write) is inefficientand complex.

SUMMARY

One embodiment of the present invention is an integrated circuit thatincludes a memory with a plurality of registers, each registers includesa data entry, a first error correction code (ECC) entry, a second ECCentry, and a mask entry. The integrated circuit includes logicconfigured to, in response to receiving a first partial write request,generate (i) a first ECC value using data in the first partial writerequest and (ii) a mask value mapping the data in the first partialwrite request to locations in the data entry. The logic is configured tostore, in a first register of the plurality of registers, the first ECCvalue in the first ECC entry, the mask value in the mask entry, and thedata in the first partial write request in the data entry and, inresponse to receiving a second partial write request, generate a secondECC value using data in the second partial write request. The logic isconfigured to store, in the first register, the second ECC value in thesecond ECC entry and the data in the second partial write request in thedata entry.

Another embodiment of the present invention is a method for managing amemory including a plurality of registers, each register including adata entry, a first ECC entry, a second ECC entry, and a mask entry. Themethod includes, in response to receiving a first partial write request,generating (i) a first ECC value using data in the first partial writerequest and (ii) a mask value mapping the data in the first partialwrite request to locations in the data entry. The method includesstoring, in a first register of the plurality of registers, the firstECC value in the first ECC entry, the mask value in the mask entry, andthe data in the first partial write request in the data entry and, inresponse to receiving a second partial write request, generating asecond ECC value using data in the second partial write request. Themethod includes storing, in the first register, the second ECC value inthe second ECC entry and the data in the second partial write request inthe data entry.

Another embodiment of the present invention is a computer programproduct for managing a memory comprising a plurality of registers, eachregister comprising a data entry, a first ECC entry, a second ECC entry.The program product includes computer-readable program code executableby one or more computer processors to, in response to receiving a firstpartial write request, generate (i) a first ECC value using data in thefirst partial write request and (ii) a mask value mapping the data inthe first partial write request to locations in the data entry. Theprogram code is executable to store, in a first register of theplurality of registers, the first ECC value in the first ECC entry, themask value in the mask entry, and the data in the first partial writerequest in the data entry, and, in response to receiving a secondpartial write request, generate a second ECC value using data in thesecond partial write request. The program code is executable to store,in the first register, the second ECC value in the second ECC entry andthe data in the second partial write request in the data entry.

BRIEF DESCRIPTION OF THE SEVERAL VIEWS OF THE DRAWINGS

FIG. 1 illustrates a computing system for performing partial registerwrites, according to one embodiment described herein.

FIG. 2 is a flow chart for performing partial writes to a register,according to one embodiment described herein.

FIGS. 3A and 3B illustrate data in a register during partial writes,according embodiments described herein.

FIG. 4 illustrates a processor which performs partial writes toregisters, according to one embodiment described herein.

FIG. 5 is a flow chart for performing partial writes to a register,according to one embodiment described herein.

FIGS. 6A and 6B illustrate data in a register during partial writes,according to one embodiment described herein.

FIG. 7 is a flow chart for error checking data stored in a register,according to one embodiment described herein.

To facilitate understanding, identical reference numerals have beenused, where possible, to designate identical elements that are common tothe figures. It is contemplated that elements disclosed in oneembodiment may be beneficially utilized on other embodiments withoutspecific recitation.

DETAILED DESCRIPTION

Embodiments described herein include a computing system that permitspartial writes into a memory element—e.g., a register on a processor.For example, the data to be written into the memory element may bespread across multiple sources. In one embodiment, the data is organizedin blocks in the memory system, but the data to be written into thememory element may span multiple blocks. The register may receive datafrom the two different blocks at different times and perform twoseparate partial write commands to store the data. For example, afterstoring the data from the first partial write and once the secondpartial write is received, the computing system may read out the data ofthe first partial write from the memory element, combine it with thedata from the second partial write, and store the combined data in thememory element—i.e., a read-modify-write. Instead of performing theread-modify-write, embodiments described herein perform the firstpartial write to store a first portion of data into the memory elementand the second partial write to store the remaining portion of the data.

In one embodiment, the computing system uses a byte-write mask to trackwhich parts of the register store valid data and which do not. Forexample, if the first partial write includes data to be stored at bytes[5-7] of an 8 byte register, the system updates the byte-write mask toindicate the last three bytes are valid while the first five bytes arenot. When the second partial write containing the remaining five bytesis received, the computing system can identify where these five bytesshould be stored in the register (i.e., in the first five byte locations[0-4]) by referencing the byte-write mask. The byte-write mask can beupdated to indicate that all the data stored in the register is valid.Moreover, if data is read out of the register after the first partialwrite is complete but before the second partial write is performed, thebyte-write mask informs the computing system which portions of the datain the register is valid and which is not. Thus, by referencing thebyte-write mask, the computing device can determine if the memoryelement stores only partial data or complete data.

One issue with performing two partial writes instead of one partialwrite followed by a read-modify-write is generating an ECC value for thedata. When performing the read-modify-write, the data from the twopartial writes are combined. During this time, the computing system cangenerate the ECC for the data in the memory element. However, if twopartial writes are performed, then the computing system would need toretrieve the combined data to generate the ECC value representing allthe stored data. But performing the additional read (and then write tostore the ECC) slows down the computing system. Instead, embodimentsherein generate an ECC value for each of the partial writes. That is,when storing the data of the first partial write, the computing systemgenerates a first ECC value for the data in the first partial write andstores this value in the memory element. Later, when performing thesecond partial write, the computing system generates a second ECC valuefor this data which is also stored in the memory element. Whenretrieving the first and second ECC values to perform error correction,the ECC values can be combined to yield a combined ECC value for thedata in both the first and second partial writes.

Furthermore, even if the computing system receives a request to read outthe data in the memory element before the second partial write has beenperformed, the first ECC value can be used to ensure the data of thefirst partial write was not corrupted. For example, the computing systemmay use the byte-write mask to zero out the invalid bytes of the datastored in the memory element and generate a test ECC value using thiscombination of valid data and the additional zeros. The test ECC valuecan be compared to the first ECC value to ensure an error was notintroduced into the data. In this manner, by calculating and storingindividual ECC values for each partial write request, the computingsystem can perform error checking even when data from only one of thepartial write requests has been loaded into the memory element.

FIG. 1 illustrates a computing system 100 for performing partialregister writes, according to one embodiment described herein. Thesystem 100 includes a processor 105 which represents one or moreprocessing elements that each may include one or more processing cores.The processor 105 contains a memory 107 which may include volatilememory, non-volatile memory, or combinations thereof. In one embodiment,the memory 107 is a data cache or RAM for the processor 105. Moreover,although shown as being internal to the processor 105, portions of thememory 107 may be located outside the processor 105—e.g., locatedexternal to the integrated circuit or circuits that include theprocessor 105.

The processor 105 also includes instruction execution pipelines 110 andregisters 115. The pipelines 110 represent multiple sequential steps forexecuting multiple computer instructions in parallel—e.g., a registerload, add, copy, etc. To execute the computer instruction, the pipelines110 may send requests to store data in, or read data from, the registers115. As shown, each register 115 includes an individual memory elementincluding multiple fields or entries—i.e., a data entry 120, first ECCentry 125, and second ECC entry 130. Each of these entries may have apredetermined length that defines the number of bit locations in theentries. In the examples below, it is assumed the data entry 120 stores8 bytes (64 bits) while each of the ECC entries 125, 130 store 8 bits ofdata. However, this is just one example and is not intended to limit thescope of the embodiments herein. For example, other suitable lengthsinclude 4 bytes for the data entry 120 and 4 bits for each of the ECCentries 125, 130.

In some cases, data is stored in the data entry 120 of a particularregister 115 in multiple steps referred to herein as partial writes orpartial write requests. In one embodiment, the processor 105 may storedata in the data entry 120 using two partial write requests. Forexample, the data may be stored in memory 107 in blocks of data (e.g.,8, 16, or 32 kilobyte blocks). However, a request to load data from thememory 107 into one of the registers 115 may span multiple blocks. Arequest that spans multiple memory blocks is referred to herein as anunaligned load request. Because the memory 107 may not be able to returndata from multiple blocks simultaneously, the load request is broken upinto two different reads from the memory 107. For example, each of thedata blocks may be stored on separate elements or memory banks in thememory 107 where only one element can be accessed at any given time. Inthis manner, the requested data is retrieved from the memory 107 atdifferent times and stored in the register 115 using two partial writes.

During the first partial write, the processor 105 stores data in a firstportion of the data entry 120. For instance, the data in the firstpartial write may include the first three bytes of the eight bytes ofrequested data which are stored at bytes [0-2] of the data entry 120A(where byte [0] is the most significant byte and byte [7] is the leastsignificant byte). Later, when the remaining five bytes are received inthe second partial write, the processor 105 stores this data at bytes[3-7] in the data entry 120A. As discussed later, the processor 105 maygenerate a byte-write mask to identify which portion of the data entry120 stores valid data and which portion stores invalid data if only oneof the partial write requests has been performed.

Instead of the first partial write including data that is written intothe most significant bites of the data entry 120A, the data may be forthe least significant bytes. For example, the first partial write may beintended for bytes [6-7] while the second partial write includes datafor bytes [0-5]. Thus, regardless of the order in which it is received,the processor 105 can perform two partial writes to store the completedata in the data entries 120 in the registers 115 rather than using onepartial write and one read-modify-write.

In addition to storing data in the data entry 120, when performing thepartial writes the processor 105 generates respective ECC values thatare stored in the ECC entries 125, 130. In embodiments herein, the ECCvalues include 8 bits where each bit corresponds to a byte stored in thedata entry 120. For example, the first bits in both ECC values 125, 130may correspond to byte [0] of the data entry 120, the second bits in theECC values 125, 130 correspond to byte [1], and so forth. However, aswill be discussed in more detail below, only one of the first bits inthe ECC entries 125, 130 may be valid. For example, the first bit in ECCentry 125 may represent byte [0] in the data entry 120, while the firstbit in the ECC value 130 is an invalid data bit. In contrast, the sixthbit in ECC entry 130 may represent byte [5] in the data entry 120, whilethe sixth bit in ECC entry 125 is an invalid data bit.

The processor 105 updates one of the ECC entries 125, 130 each time apartial write is performed. For instance, if the first partial writestored data at bytes [5-7] in the data entry 120, a corresponding ECCvalue for these three bytes is stored in either ECC entry 125 or ECCentry 130. When the remaining five bytes are received during the secondpartial write, the processor 105 calculates another ECC value for thesebytes which is then stored in the unused ECC entry 125, 130.

FIG. 2 is a flow chart 200 illustrating a method 200 for performingpartial writes to a register, according to one embodiment describedherein. For clarity, method 200 is discussed in parallel with register300 illustrated in FIGS. 3A and 3B. At block 205, a register receives afirst partial write request which includes data smaller than a storagesize of the register. In one embodiment, the register includes a dataentry that has a predetermined number of bit locations—e.g., 64 bits.However, the data in the first partial write request may include only aportion of the data to be stored in the register as part of, e.g., aload request. For instance, the first partial write may store one toseven bytes of the total eight bytes into the data entry of theregister.

The register 300 shown in FIG. 3A illustrates one example of performinga partial write request. The numbers 0-7 above the data entry 120indicate that a maximum of eight bytes of data can be stored in entry120. The numbers 0-7 below the ECC entries 125, 130 indicate that amaximum of eight bits of data can be stored in these entries. Afterperforming block 205, the data entry 120 of register 300 includes datastored at bytes [0-2] as shown by the hatching. The remaining bytes ofthe data entry 120—i.e., bytes [3-7]—are invalid. These invalid bytesmay include zeros, null values, or leftover data that was part of aprevious write request to the register 300. In one embodiment, whenstoring the valid data at bytes [0-2] the processor may write zero inbytes [3-7] in parallel. However, in another embodiment, the processormay selectively write data only to bytes [0-2] while leaving the datastored at bytes [3-7] unchanged (which may be old or stale data that wasstored in a previous write to the register 300).

Returning to method 200, at block 210, the processor generates a firstECC value corresponding to the data in the first partial write request.In one embodiment, the first ECC value includes at least one invaliddata bit. That is, the ECC value may include eight bits where each bitcorresponds to a respective byte in the data entry of the register.However, when doing a partial write, only a portion of the eight bytesis being written into the data entry, and thus, the first ECC valueincludes some bits that are valid and others that are invalid. As shownin FIG. 3A, the ECC value stored at ECC entry 125 has three valid bitsindicated by the hashing which correspond to the three data bytes storedat locations [0-2] in the data entry 120. However, the other five bitsof the ECC entry 125 are invalid data bits (which are indicated by theX's) since the remaining five bytes of the data to be stored in dataentry 120 has not yet been received. However, if all the data associatedwith a load request was received at one time (i.e., the load request wasaligned with a data block rather than unaligned), then all the bits inthe first ECC entry 125 would be filled with valid bits. Stateddifferently, none of the bits in the ECC entry 120 would be invalid.

The particular technique used to generate the ECC values is not criticalto the embodiments described herein so long as the selected techniquegenerates ECC values that have the desired relationship with the datastored in the data entry. That is, in this example, each valid bit inthe generated ECC value corresponds to a valid byte of data stored inthe data entry of the register.

At block 215, the processor stores the data of the first partial writerequest and the first ECC value into the register. Thus, in register300, the three most significant bytes of data entry 120 include validdata while the five least significant bytes include invalid data.Similarly, the ECC entry 125 stores the first ECC value whichcorresponds to the first three bytes of data in the data entry 120,while the second ECC entry 130 stores invalid data.

At block 220, the register receives a second partial write request whichincludes the remaining portion of the data to be stored in the register.For example, if the first partial request received at block 205 includedthe first three most significant bytes of the data to be stored in theregister, the second partial write request includes the remaining fiveleast significant bytes of data. Alternatively, if the first partialrequest included the four least significant bytes of data, the secondpartial request includes the four most significant bytes of data.

At block 225, the processor generates a second ECC value correspondingto the data in the second partial write request. Again, because thesecond partial write request includes only a portion of the data to bewritten to the data entry of the register, the second ECC value mayinclude at least one invalid data bit. At block 230, the processorstores the data of the second partial write request and the second ECCvalue into the register. FIG. 3B illustrates the data stored in theregister 300 after performing blocks 225 and 230 of method 200. Asshown, the data entry 120 now stores eight valid bytes of data. In thisexample, the remaining five bytes of data are stored in bytes [3-7].Moreover, the second ECC value generated at block 225 is stored in theECC entry 130. Here, the bits [3-7] correspond to bytes [3-7] of thedata entry 120 while bits [0-2] are invalid data bits. Although notshown, the processor may include a byte-write mask that indicates whichbits in the ECC entries 125, 130 are valid and which are invalid. In oneembodiment, the invalid data bits may be saved as zero bits. That is,when saving the ECC values in the entries 125, 130, the processor mayplace zeros in the invalid data bits.

In combination, the two ECC values stored in ECC entries 125, 130include ECC bits for all the data stored in data entry 120.Specifically, the first three bits in ECC entry 125 correspond to bytes[0-2] while the last five bits in ECC entry 130 correspond to bytes[3-7]. As discussed later, when performing an error checking process,the data in the ECC entries 125, 130 may be combined to form a combinedECC value which then can be compared against a test ECC value generatedusing the data stored in bytes [0-7] in data entry 120. The combined ECCvalue may include only the valid bits from each of the ECC entries 125,130 while the invalid bits are ignored or removed.

FIG. 4 illustrates a processor 105 which performs partial writes toregisters in a register file 405, according to one embodiment describedherein. The register file 405 includes multiple registers that eachincludes a data entry 120, a byte-write mask entry 410, a first ECCentry 125, and a second ECC entry 130. The register file 405 may be ascalar register file for storing scalar data, a vector register file forstoring data used in floating point operations, a history buffer thatmay save data previously stored in other registers so the state of theprocessor 105 can be saved or rolled back, and the like. The data entry120 and the ECC entries 125, 130 have a similar function as the entriesdiscussed above and will not be repeated here. The byte-write mask entry410 stores a mask value where each bit in the mask value indicateswhether a corresponding byte in the data entry 120 is valid. Forexample, if only the last two bytes in the data entry 120 are valid, thelast two bits in the mask value may be ones while the first six bits inthe mask are zeros. Thus, by evaluating the mask value stored in thebyte-write mask entry 410, the processor 405 can identify whether onlypartial data has been written into the data entry 120, and if so, whichbytes of the data entry 120 include valid data and which include invaliddata.

The processor 105 includes a load/store unit 440, ECC/mask generator445, and memory 107 which are used to store data in the register file405. For example, a thread executing in a pipeline of the processor 105(not shown) may send an instruction to the load/store unit 440 to load aparticular value into the register file 405. To do so, the load/storeunit 440 receives the data from the memory 107 which may include a cachememory on the processor or memory elements external to the processor105—e.g., RAM or a hard disk. As discussed above, the requested data maybe a chunk of data (e.g., 64 bytes) that spans multiple blocks of memory107—i.e., the requested data is part of an unaligned load request. As aresult, the requested data is stored into a register using multiplepartial writes. However, if the requested data is located in one blockof data, then the load/store unit 440 may send only one writeinstruction to the register file 405.

Assuming the requested data spans multiple blocks of data, theload/store unit 440 receives the partial data at two different times andforwards this data to the ECC/mask generator 445 which generates an ECCvalue for each of the partial writes. When performing the first partialwrite, the ECC generator 445 generates a first ECC value for thecorresponding data which is stored in the ECC entry 125. Moreover, theECC/mask generator 445 generates a mask value stored in the byte-writemask entry 410. In this example, if the first partial write stores thefirst three bytes of data into the register, the mask value indicatesthat the first three bytes of the data entry 120 are valid while theremaining five bytes are invalid. In one embodiment, the mask value isgenerated using information provided by the load/store unit 440. Theload/store unit 440 may provide a three bit number that informs theECC/mask generator 445 of the boundary between the partial writes aswell as left/right indicator. For example, a boundary value of three(i.e., 011) indicates that the two partial writes divide the data intobytes [0-2] and bytes [3-7]. The left/right indicator tells the ECC/maskgenerator 445 whether the current partial data is the most significant(left) sub-portion (e.g., bytes [0-2]) or the least significant (right)sub-portion (e.g., bytes [3-7]). Based on this information, the ECC/maskgenerator can generate the mask value and store the data correctly intothe data entry 120.

Later, when performing a second partial write, the ECC generator 445generates a second ECC value for the remaining data (e.g., the remainingfive of the eight bytes of data) which is stored in the ECC entry 130.The ECC/mask generator 445 may also update the mask value in the maskentry 410 to indicate that all eight bytes in the data entry 120 arevalid.

The processor 105 may request to read data from one of the registers inthe register file 405 that is then transmitted to an issue queue 430.The data may be read from the register either after one of the twopartial writes has been performed or after all of the partial writeshave been performed. When reading data from a particular register in theregister file 405, the processor 105 performs an error correction checkto make sure the data has not been corrupted. For example, alphaparticles or background radiation may cause one or more of the bits inthe registers to flip. By performing the error check, the processor 105can mitigate and correct these errors in the data.

If only one partial write has been performed, only one of the ECCentries 125, 130 contains an ECC value corresponding to data stored inthe data entry 120. For example, the first ECC entry 125A may contain anECC value for six bytes in the data entry 120A while the second ECCentry 130A may store all zeros (which may have been stored in entry 130Awhen the ECC/mask generator 445 updated the first ECC entry 125A). Theprocessor 105 combines the ECC entries 125A, 130A to yield a combinedECC value. In this case, because xoring any value with zeros results inthe original value, the combined ECC value is the value stored in thefirst ECC entry 125A. Using the information in the byte-write mask entry410, an ECC generator 415 determines the valid bits stored in the dataentry 120A (e.g., the six valid bytes) and generates a test ECC valuefor these bytes. Stated differently, the mask value in the mask entry410 informs the ECC generator 415 which data in the data entry 120A isvalid and which data is invalid, and thus, should be ignored. In oneembodiment, the ECC generator 415 replaces the invalid bits with zerosbefore calculating the test ECC value. An ECC checker 425 compares thecombined ECC value outputted by the XOR logic 420 with the test ECCvalue outputted by the ECC generator 415. If there is a match, the datain the register is deemed valid and stored in the issue queue 430. Ifnot, the processor 105 may perform error correction to mitigate orcorrect the errors which will not be discussed in detail in thisdisclosure.

If all of the partial writes have been performed before the data is readout, both ECC entries 125, 130 contain valid ECC entries (which each mayinclude one or more invalid data bits). In this embodiment, the invalidbits are zeros. For example, the first six bits in the ECC entry 125 maybe valid while the last two bits are zero. Conversely, the first sixbits of the ECC entry 130 are zeros while the last two bits are valid.Thus, when combined by the XOR logic 420, the result is a combined ECCentry with eight valid bits—six bits defined by the first six bits inthe ECC entry 125 and two bits defined by the last two bits in the ECCentry 130. Moreover, the mask value in the mask entry 410 indicates thatall the data in the data entry 120 is valid, and thus, the ECC generator415 generates the test ECC value using all the data in the entry 120. Ifthe test ECC value matches the combined ECC value outputted by the XORlogic 420, the data stored in the register is deemed valid and isforwarded to the issue queue 430.

In one embodiment, the issue queue 430 does not forward the data readout from the register file 405 until all the data is received. That is,if the register file 405 stores the data from only one partial writeoperation, the queue 430 waits until the second partial write isreceived by the register file 405 and then transmitted to the issuequeue 430. For example, the issue queue 430 may include a snoopingoperation that monitors the write request into the register file 405 todetermine when the other write operation has been performed and can beread out.

Once the data is received, the issue queue 430 forwards the data tooperand (OP) latches 435 that store the received data as operands forprocessor instructions. For example, the OP latches 435 may store theresult of performing an add or multiply instruction. The OP latches 435forwards the operand data to the load/store unit 440 which may transmitthe data to the memory 107.

FIG. 5 is a flow chart 500 for performing partial writes to a register,according to one embodiment described herein. For clarity, method 500 isdiscussed in parallel with a register 600 illustrated in FIGS. 6A and6B. At block 505, the load/store unit receives a first partial writerequest for a register in a register file. That is, the load/store unitmay receive only a portion of the data from memory which is to bewritten into the register. Instead of waiting for the remaining portionof data, the processor proceeds to store the partial data in theregister.

At block 510, the processor generates a first ECC value for the data inthe first partial write request. As shown in FIG. 6A, the first partialwrite request contains the three least significant bytes [5-7]. Like inFIGS. 3A and 3B, the numbers 0-7 above the data entry 120 representbytes of data while the numbers 0-7 below the mask entry 410 and ECCentries 125, 130 represent bits of data. The processor generates a firstECC value that is stored in ECC entry 130. The first five bits of thefirst ECC value are invalid data bits, and in one embodiment, are zeros.The last three bits, however, contain valid ECC bit values that eachcorrespond to a respective one of the bytes [5-7] in data entry 120.Moreover, although the first ECC value was stored in ECC entry 130, itis also possible to store this value in ECC entry 125. So long as thedata is stored the same way—e.g., the leftmost five bits are zeros andthe rightmost three bits are valid data—when combined with the data inthe other ECC entry, the resulting combined ECC value is the same.

At block 515, the processor generates a byte-write mask indicating validdata in the data entry of the register. For example, when receivingpartial data, a load/store unit may provide a boundary byte and aleft/right indicator that inform the mask generator if the partial datais the least significant portion or the most significant portion of thedata to be stored in the register. In the example shown in FIG. 6A, thepartial data is the least significant portion and includes bytes [5-7].As such, the mask stored in the mask entry 410 has zeros stored in bits0-4 which indicates bytes [0-4] of data entry 120 are invalid and onesstored in bits 5-7 indicating bytes [5-7] of entry 120 are valid.

At block 520, the processor stores the data in the first partial writerequest, the first ECC value, and the byte-write mask in the register.As shown in FIG. 6A, the bytes [0-4] in data entry 120 and the ECC entry125 do not store valid data. In one embodiment, these portions of theregister 600 may store null values or be zeroed out when the valid datais stored. Alternatively, these portions may continue to store previousdata that was loaded into the register 600 during a previous writerequest.

At block 525, the load/store unit receives a second partial writerequest for the register. In one embodiment, the second partial writerequest contains the remaining data for the data entry in the register.However, the embodiments herein are not limited to two partial writesand instead may use three or four partial writes to fill a data entry ina register. In these embodiments, the register may include additionalECC entries for accommodating ECC values for each of the partial writes.

At block 530, the processor generates a second ECC value for the data inthe second partial write request. As shown in FIG. 6B, the second ECCvalue is stored in ECC entry 125 and includes five valid bits—i.e., bits0-4 which correspond to bytes [0-4] in data entry 120. The lastremaining bits in the ECC entry 125—i.e., bits 5-7—are invalid data bitsand do not correspond to the data in the data entry 120. As mentionedabove, these bits may be zeros.

At block 535, the processor stores the data in the second partial writerequest and the second ECC value in the register. As illustrated in FIG.6B, the data entry 120 is now full and contains eight bytes of validdata. That is, the processor replaces the invalid data at bytes [0-4]shown in FIG. 6A with valid data received in the second partial writerequest. In addition, the ECC entry 125 now includes the ECC values forthe five bytes of data written during the second write request.

At block 540, the processor updates the byte-write mask in the registerto indicate the register is full. In FIG. 6B, the mask entry 410 nowstores all ones which indicate that each byte in the data entry 120stores valid data and that the data entry 120 is full. As discussedbelow, the byte-write mask in the mask entry 410 can be used to performerror checking when data is read from the register 600.

FIG. 7 is a flow chart illustrating a method 700 for error checking datastored in a register, according to one embodiment described herein. Atblock 705, the register receives a request to send its data to the issuequeue. At block 710, the processor determines if the register storesonly partial data—e.g., less than 64 bytes of valid user data. To do so,the processor may evaluate the byte-write mask stored in the register.Referring to FIG. 6A, because a one in the mask entry 410 represents avalid byte in the data entry 120 and a zero indicates an invalid byte,the processor can read this data to determine if only one of the partialwrites has been performed. If any of the bits in the mask are zero, theprocessor can determine that only one of the partial writes has beenperformed.

If only partial data is written in the data entry of the register,method 700 proceeds to block 715 where the invalid bits in the dataentry and the unused ECC entry are zeroed out when retrieved from theregister. Using FIG. 6A as an example, when the eight bytes of dataentry 120 are retrieved from the register 600, the processor may replacewhatever data is stored at bytes [0-4] with zeros. Similarly, theprocessor can retrieve the data stored in the ECC entry 125 and zero outthis data (if the data stored at entry 125 does not already store allzeros). However, the data actually stored in the data entry 120 and themask entry 410 may remain unchanged. That is, the processor may includelogic that alters the data retrieved from the entries 120, 410 whileleaving the data stored in register 600 unchanged.

At block 720, the ECC value in ECC entry 130 is xored with all zeroscorresponding to the ECC entry 125. Thus, the resulting combined ECCvalue is simply a copy of the data stored in ECC entry 130 since xoringany bit combination with zeros results in the same bit combination.Moreover, because xoring the ECC value in ECC entry 130 with zeros doesnot change the ECC value, in one embodiment, the processor may skipblock 720 after determining only a partial write was performed and usethe ECC value in ECC entry 130 as the combined ECC entry.

However, if at block 710 the processor determines using the byte-writemask that the register stores complete data (e.g., the data entry isfull), at block 720, the ECC values in the two ECC entries are xored toyield the combined ECC value. Referring to FIG. 6B, by xoring the ECCvalue in entries 125, 130, the invalid bits are removed. For example,the invalid bits in the ECC entries 125, 130 may be zeros. Thus, whenthe zero stored at bit 0 of ECC entry 130 is xored with the valid bit atbit 0 of ECC entry 125, the result is that the valid bit of ECC entry125 becomes bit 0 of the combined ECC value. After performing the XORoperation, bits 0-4 of the combined ECC value are the same as bits 0-4in the ECC entry 125, while bits 5-7 of the combined ECC value are thesame as bits 5-7 of the ECC entry 130. Thus, the combined ECC value hasthe same bit length as the ECC values stored in entries 125, 130.

At block 725, the processor generates a test ECC value from the dataretrieved from the data entry. In the case of a partial write, the testECC value is generated using the valid data along with the zeros thatwere added at block 715. If the data entry is full with valid data,however, the test ECC value is generated using the 8 bytes of valid datawithout replacing invalid data with zeros.

At block 730, the processor compares the test ECC value with thecombined ECC value. Referring to FIG. 6A when only one partial write hasbeen performed, the processor generates the test ECC value using zerosat byte locations [0-4] and the valid data at byte locations [5-7].Because the same technique may be used to generate the test ECC valueand the ECC values stored in the entries 125, 130, bits 5-7 of the testECC value should match bits 5-7 of the combined ECC value—i.e., bits 5-7stored in the ECC entry 130. Referring to FIG. 6B when both partialwrites have been performed, the test ECC value is generated using theeight bytes in data entry 120, and thus, include eight valid bits, eachone corresponding to one of the eight bytes. The processor compares theeight bits in the test ECC value to the eight valid bits in the combinedECC value to determine if they match.

If a bit was flipped in the valid bits of either the data entry 120 orthe ECC entries 125, 130, the test ECC value and the combined ECC valuemay not match. In response, method 700 proceeds to block 740 where errorreporting is performed and the processor may attempt to identify andcorrect the flipped bit. If there is a match, however, method 700proceeds to block 735 where the data stored in the data entry is sent tothe issue queue. Since the data only includes a partial write, the issuequeue may delay forwarding the data until the remaining portion isreceived.

The descriptions of the various embodiments of the present inventionhave been presented for purposes of illustration, but are not intendedto be exhaustive or limited to the embodiments disclosed. Manymodifications and variations will be apparent to those of ordinary skillin the art without departing from the scope and spirit of the describedembodiments. The terminology used herein was chosen to best explain theprinciples of the embodiments, the practical application or technicalimprovement over technologies found in the marketplace, or to enableothers of ordinary skill in the art to understand the embodimentsdisclosed herein.

In the preceding, reference is made to embodiments presented in thisdisclosure. However, the scope of the present disclosure is not limitedto specific described embodiments. Instead, any combination of thefeatures and elements, whether related to different embodiments or not,is contemplated to implement and practice contemplated embodiments.Furthermore, although embodiments disclosed herein may achieveadvantages over other possible solutions or over the prior art, whetheror not a particular advantage is achieved by a given embodiment is notlimiting of the scope of the present disclosure. Thus, the aspects,features, embodiments and advantages are merely illustrative and are notconsidered elements or limitations of the appended claims except whereexplicitly recited in a claim(s). Likewise, reference to “the invention”shall not be construed as a generalization of any inventive subjectmatter disclosed herein and shall not be considered to be an element orlimitation of the appended claims except where explicitly recited in aclaim(s).

Aspects of the present invention may take the form of an entirelyhardware embodiment, an entirely software embodiment (includingfirmware, resident software, microcode, etc.) or an embodiment combiningsoftware and hardware aspects that may all generally be referred toherein as a “circuit,” “module” or “system.”

The present invention may be a system, a method, and/or a computerprogram product. The computer program product may include a computerreadable storage medium (or media) having computer readable programinstructions thereon for causing a processor to carry out aspects of thepresent invention.

The computer readable storage medium can be a tangible device that canretain and store instructions for use by an instruction executiondevice. The computer readable storage medium may be, for example, but isnot limited to, an electronic storage device, a magnetic storage device,an optical storage device, an electromagnetic storage device, asemiconductor storage device, or any suitable combination of theforegoing. A non-exhaustive list of more specific examples of thecomputer readable storage medium includes the following: a portablecomputer diskette, a hard disk, a random access memory (RAM), aread-only memory (ROM), an erasable programmable read-only memory (EPROMor Flash memory), a static random access memory (SRAM), a portablecompact disc read-only memory (CD-ROM), a digital versatile disk (DVD),a memory stick, a floppy disk, a mechanically encoded device such aspunch-cards or raised structures in a groove having instructionsrecorded thereon, and any suitable combination of the foregoing. Acomputer readable storage medium, as used herein, is not to be construedas being transitory signals per se, such as radio waves or other freelypropagating electromagnetic waves, electromagnetic waves propagatingthrough a waveguide or other transmission media (e.g., light pulsespassing through a fiber-optic cable), or electrical signals transmittedthrough a wire.

Computer readable program instructions described herein can bedownloaded to respective computing/processing devices from a computerreadable storage medium or to an external computer or external storagedevice via a network, for example, the Internet, a local area network, awide area network and/or a wireless network. The network may comprisecopper transmission cables, optical transmission fibers, wirelesstransmission, routers, firewalls, switches, gateway computers and/oredge servers. A network adapter card or network interface in eachcomputing/processing device receives computer readable programinstructions from the network and forwards the computer readable programinstructions for storage in a computer readable storage medium withinthe respective computing/processing device.

Computer readable program instructions for carrying out operations ofthe present invention may be assembler instructions,instruction-set-architecture (ISA) instructions, machine instructions,machine dependent instructions, microcode, firmware instructions,state-setting data, or either source code or object code written in anycombination of one or more programming languages, including an objectoriented programming language such as Smalltalk, C++ or the like, andconventional procedural programming languages, such as the “C”programming language or similar programming languages. The computerreadable program instructions may execute entirely on the user'scomputer, partly on the user's computer, as a stand-alone softwarepackage, partly on the user's computer and partly on a remote computeror entirely on the remote computer or server. In the latter scenario,the remote computer may be connected to the user's computer through anytype of network, including a local area network (LAN) or a wide areanetwork (WAN), or the connection may be made to an external computer(for example, through the Internet using an Internet Service Provider).In some embodiments, electronic circuitry including, for example,programmable logic circuitry, field-programmable gate arrays (FPGA), orprogrammable logic arrays (PLA) may execute the computer readableprogram instructions by utilizing state information of the computerreadable program instructions to personalize the electronic circuitry,in order to perform aspects of the present invention.

Aspects of the present invention are described herein with reference toflowchart illustrations and/or block diagrams of methods, apparatus(systems), and computer program products according to embodiments of theinvention. It will be understood that each block of the flowchartillustrations and/or block diagrams, and combinations of blocks in theflowchart illustrations and/or block diagrams, can be implemented bycomputer readable program instructions.

These computer readable program instructions may be provided to aprocessor of a general purpose computer, special purpose computer, orother programmable data processing apparatus to produce a machine, suchthat the instructions, which execute via the processor of the computeror other programmable data processing apparatus, create means forimplementing the functions/acts specified in the flowchart and/or blockdiagram block or blocks. These computer readable program instructionsmay also be stored in a computer readable storage medium that can directa computer, a programmable data processing apparatus, and/or otherdevices to function in a particular manner, such that the computerreadable storage medium having instructions stored therein comprises anarticle of manufacture including instructions which implement aspects ofthe function/act specified in the flowchart and/or block diagram blockor blocks.

The computer readable program instructions may also be loaded onto acomputer, other programmable data processing apparatus, or other deviceto cause a series of operational steps to be performed on the computer,other programmable apparatus or other device to produce a computerimplemented process, such that the instructions which execute on thecomputer, other programmable apparatus, or other device implement thefunctions/acts specified in the flowchart and/or block diagram block orblocks.

The flowchart and block diagrams in the Figures illustrate thearchitecture, functionality, and operation of possible implementationsof systems, methods, and computer program products according to variousembodiments of the present invention. In this regard, each block in theflowchart or block diagrams may represent a module, segment, or portionof instructions, which comprises one or more executable instructions forimplementing the specified logical function(s). In some alternativeimplementations, the functions noted in the block may occur out of theorder noted in the figures. For example, two blocks shown in successionmay, in fact, be executed substantially concurrently, or the blocks maysometimes be executed in the reverse order, depending upon thefunctionality involved. It will also be noted that each block of theblock diagrams and/or flowchart illustration, and combinations of blocksin the block diagrams and/or flowchart illustration, can be implementedby special purpose hardware-based systems that perform the specifiedfunctions or acts or carry out combinations of special purpose hardwareand computer instructions.

While the foregoing is directed to embodiments of the present invention,other and further embodiments of the invention may be devised withoutdeparting from the basic scope thereof, and the scope thereof isdetermined by the claims that follow.

What is claimed is:
 1. An integrated circuit, comprising: a memorycomprising a plurality of registers, each register comprising: a dataentry, a first error correction code (ECC) entry, a second ECC entry,and a mask entry; and logic configured to: in response to receiving afirst partial write request, generate (i) a first ECC value using datain the first partial write request and (ii) a mask value mapping thedata in the first partial write request to locations in the data entry,store, in a first register of the plurality of registers, the first ECCvalue in the first ECC entry, the mask value in the mask entry, and thedata in the first partial write request in the data entry, and inresponse to receiving a second partial write request, generate a secondECC value using data in the second partial write request, and store, inthe first register, the second ECC value in the second ECC entry and thedata in the second partial write request in the data entry.
 2. Theintegrated circuit of claim 1, wherein a combination of the data of thefirst and second partial write requests fills the data entry of thefirst register, wherein the data entry has a predefined capacity.
 3. Theintegrated circuit of claim 1, the logic configured to: in response toreceiving the second partial write request, update the mask value in themask entry to indicate that the data entry is full.
 4. The integratedcircuit of claim 1, wherein the logic is configured to: generate thefirst ECC value, wherein at least one of a plurality of bits of thefirst ECC value is an invalid data bit; and generate the second ECCvalue, wherein at least one of a plurality of bits of the second ECCvalue is an invalid data bit.
 5. The integrated circuit of claim 4,wherein each valid bit in the first ECC value corresponds to arespective byte of the data in the first partial write request, and eachvalid bit in the second ECC value corresponds to a respective byte ofthe data in the first partial write request.
 6. The integrated circuitof claim 1, wherein the logic is configured to: in response to receivinga request to read the data entry of the first register, determine if thedata entry is partially full by evaluating the mask value in the maskentry, upon determining the data entry is partially full, generate acombined ECC value by xoring the first ECC value with the second ECCvalue, wherein one of the first and second ECC values is filled withzeros.
 7. The integrated circuit of claim 6, wherein the logic isconfigured to: upon determining the data entry is partially full, addzeros corresponding to locations of the data entry not storing validdata of the first partial write request, generate a test ECC value basedon the data in the first partial write request and the added zeros; andcompare the test ECC value to the combined ECC value.
 8. A method formanaging a memory including a plurality of registers, each registerincluding a data entry, a first ECC entry, a second ECC entry, and amask entry, the method comprising: in response to receiving a firstpartial write request, generating (i) a first ECC value using data inthe first partial write request and (ii) a mask value mapping the datain the first partial write request to locations in the data entry,storing, in a first register of the plurality of registers, the firstECC value in the first ECC entry, the mask value in the mask entry, andthe data in the first partial write request in the data entry, and inresponse to receiving a second partial write request, generating asecond ECC value using data in the second partial write request, andstoring, in the first register, the second ECC value in the second ECCentry and the data in the second partial write request in the dataentry.
 9. The method of claim 8, wherein a combination of the data ofthe first and second partial write requests fills the data entry of thefirst register, wherein the data entry has a predefined capacity. 10.The method of claim 8, further comprising: in response to receiving thesecond partial write request, updating the mask value in the mask entryto indicate that the data entry is full.
 11. The method of claim 8,further comprising: generating the first ECC value, wherein at least oneof a plurality of bits of the first ECC value is an invalid data bit;and generating the second ECC value, wherein at least one of a pluralityof bits of the second ECC value is an invalid data bit.
 12. The methodof claim 11, wherein each valid bit in the first ECC value correspondsto a respective byte of the data in the first partial write request, andeach valid bit in the second ECC value corresponds to a respective byteof the data in the first partial write request.
 13. The method of claim8, wherein in response to receiving a request to read the data entry ofthe first register, determine if the data entry is partially full byevaluating the mask value in the mask entry, upon determining the dataentry is partially full, generate a combined ECC value by xoring thefirst ECC value with the second ECC value, wherein one of the first andsecond ECC values is filled with zeros.
 14. The method of claim 13,further comprising: upon determining the data entry is partially full,add zeros corresponding to locations of the data entry not storing validdata of the first partial write request, generate a test ECC value basedon the data in the first partial write request and the added zeros; andcompare the test ECC value to the combined ECC value.
 15. A computerprogram product for managing a memory comprising a plurality ofregisters, each register comprising a data entry, a first ECC entry, asecond ECC entry, and a mask entry, the computer program productcomprising: a computer-readable storage medium having computer-readableprogram code embodied therewith, the computer-readable program codeexecutable by one or more computer processors to: in response toreceiving a first partial write request, generate (i) a first ECC valueusing data in the first partial write request and (ii) a mask valuemapping the data in the first partial write request to locations in thedata entry, store, in a first register of the plurality of registers,the first ECC value in the first ECC entry, the mask value in the maskentry, and the data in the first partial write request in the dataentry, and in response to receiving a second partial write request,generate a second ECC value using data in the second partial writerequest, and store, in the first register, the second ECC value in thesecond ECC entry and the data in the second partial write request in thedata entry.
 16. The computer program product of claim 15, wherein acombination of the data of the first and second partial write requestsfills the data entry of the first register, wherein the data entry has apredefined capacity.
 17. The computer program product of claim 15,wherein the computer-readable program code is further executable to: inresponse to receiving the second partial write request, update the maskvalue in the mask entry to indicate that the data entry is full.
 18. Thecomputer program product of claim 15, wherein the computer-readableprogram code is further executable to: generate the first ECC value,wherein at least one of a plurality of bits of the first ECC value is aninvalid data bit; and generate the second ECC value, wherein at leastone of a plurality of bits of the second ECC value is an invalid bit.19. The computer program product of claim 18, wherein each valid bit inthe first ECC value corresponds to a respective byte of the data in thefirst partial write request, and each valid bit in the second ECC valuecorresponds to a respective byte of the data in the first partial writerequest.
 20. The computer program product of claim 15, wherein thecomputer-readable program code is further executable to: in response toreceiving a request to read the data entry of the first register,determine if the data entry is partially full by evaluating the maskvalue in the mask entry, upon determining the data entry is partiallyfull, generate a combined ECC value by xoring the first ECC value withthe second ECC value, wherein one of the first and second ECC values isfilled with zeros.